Note: This tutorial assumes that you have completed the previous tutorials: ROS tutorials. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Data association exploiting multiple object attributes
Description: If a world model object contains different attributes, the data association might simplify, e.g., a red blob is most likely to originate from a red world model object. This tutorial demonstrates the exploitation of multiple attributes per object during data association.Tutorial Level: BEGINNER
Next Tutorial: Tracking an unknown number of objects
Contents
Goal
The task of the wire meta package is fusing measurements into one consistent world state estimate. In order to achieve this the data association problem has to be solved. In this demo, two different objects are present. Both objects are detected with two discrete properties:
|
Color |
Shape |
Object 1 |
green |
square |
Object 2 |
red |
square |
and one continuous property being position
Approach
In order to determine whether an association between a measurement and a world model object is valid, both discrete and continuous properties are considered. As a result, the association between a red blob and a green world model object, or vice versa, gets a low probability. The same holds for world model objects that have a predicted position far from the measured position. By taking all available attributes into account the data association problem is simplified. The object position estimates are tracked using Kalman filters with a constant velocity motion model.
Data
In order to be able to reproduce the result shown in the video above, make sure that you have cloned and compiled the wire packages:
$ git clone https://github.com/tue-robotics/wire.git $ catkin_make
Fetch the data for this tutorial (demo02.bag) and decompress this file:
$ rosbag decompress demo02.bag
The bag file contains tfs, object detections and both rgb and depth images. The images are only included for ease of interpretation and inspection. These are not used by wire.
Reproducing the result
Start a ROS core:
$ roscore
Then, set the use_sim_time parameter to true:
$ rosparam set use_sim_time true
and launch the wire_core:
$ roslaunch wire_core start.launch
In a new terminal, launch the visualization:
$ roslaunch wire_tutorials rviz_wire_kinetic.launch
Finally, play back the data:
$ rosbag play demo02.bag --clock
The results should be similar to the results shown in the video above.